"""
窗口管理模块
- 提供查找/激活窗口与获取客户区坐标的工具函数。
- 仅依赖 pywin32。
"""
from typing import Optional, Tuple

import win32con
import win32gui


class WindowManager:
    """窗口管理工具类，封装所有窗口相关操作"""

    @staticmethod
    def get_window_handle(title: str) -> Optional[int]:
        """
        根据窗口标题查找窗口句柄
        :param title: 窗口标题或部分标题
        :return: 找到的窗口句柄，未找到返回 None
        """

        def callback(hwnd, extra):
            if title.lower() in win32gui.GetWindowText(hwnd).lower():
                extra.append(hwnd)

        handles = []
        win32gui.EnumWindows(callback, handles)
        return handles[0] if handles else None

    @staticmethod
    def activate_window(hwnd: int) -> bool:
        """
        激活并置顶指定窗口
        :param hwnd: 窗口句柄
        :return: 是否激活成功
        """
        try:
            win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
            win32gui.SetForegroundWindow(hwnd)
            return True
        except Exception as e:
            print(f"激活窗口时出错: {e}")
            return False

    @staticmethod
    def get_client_rect_on_screen(hwnd: int) -> Optional[Tuple[int, int, int, int]]:
        """
        获取窗口客户区在屏幕坐标系的矩形 (left, top, right, bottom)
        """
        try:
            pt = win32gui.ClientToScreen(hwnd, (0, 0))
            left, top = pt
            right = left + win32gui.GetClientRect(hwnd)[2]
            bottom = top + win32gui.GetClientRect(hwnd)[3]
            return (left, top, right, bottom)
        except Exception:
            return None
